package com.zhiyou100.api.set_demo;

import java.util.*;
import java.util.function.Consumer;

public class Demo2 {

    public static void main(String[] args) {
        testFor();
    }


    /**
     * TreeSet遍历：
     *  foreach:
     *  Iterator:
     *  forEach:
     *  stream().forEach():
     */
    public static void testFor(){
        TreeSet<Integer> set = new TreeSet<>();
        //添加数据
        set.add(100);
        set.add(200);
        set.add(155);
        set.add(78);
        set.add(98);
        //foreach
        for (Integer i : set) {
            System.out.print("i = " + i + "\t");
        }
        System.out.println();
        System.out.println("----------迭代器---------------");
        Iterator<Integer> iterator = set.iterator();
        while (iterator.hasNext()) {
            Integer next = iterator.next();
            System.out.print("next = " + next + "\t");
        }
        System.out.println();
        System.out.println("--------forEach()方法------------");
        set.forEach(new Consumer<Integer>() {
            //accept方法中的形参表示的就是set中的元素
            @Override
            public void accept(Integer i) {
                System.out.println("i = " + i);
            }
        });
        System.out.println("----------stream操作循环------------");
        set.stream().forEach((Integer i) -> {
            System.out.println("i = " + i);
        });
    }

    /**
     * 操作： 添加、移除、截取、获取第一个、最后一个.....
     */
    public static void opeTreeSet(){
        TreeSet<Integer> set = new TreeSet<>();
        //添加数据
        set.add(100);
        set.add(200);
        set.add(155);
        set.add(78);
        set.add(98);
        System.out.println("set = " + set);
        //获取第一个元素
        Integer first = set.first();
        System.out.println("first = " + first);
        //获取最后一个元素
        Integer last = set.last();
        System.out.println("last = " + last);
        //元素截取
        SortedSet<Integer> set1 = set.subSet(98, 155);
        System.out.println("set1 = " + set1);
        //获取元素个数
        int size = set.size();
        System.out.println("size = " + size);
        //根据指定元素，获取当前集合中最接近它的元素（向上,如果有元素等于指定元素，就返回此元素，如果没有，就返回大于它的第一个元素）
        Integer integer = set.ceiling(99);
        System.out.println("integer = " + integer);
        //根据指定元素，获取当前集合中最接近它的元素（向下）
        Integer floor = set.floor(99);
        System.out.println("floor = " + floor);

        Integer higher = set.higher(100);
        System.out.println("higher = " + higher);



    }



    //创建
    public static void createTreeSet(){
        //默认创建 采用自然排序（升序）
        TreeSet<Double> set = new TreeSet<>();

        //自定义一个排序对象
        Comparator<Integer> comparator = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);
            }
        };
        //创建TreeSet集合时指定排序规则
        TreeSet<Integer> set2 = new TreeSet<>(comparator);
        //根据特定的集合创建TreeSet集合
        List<Integer> list = new ArrayList<>();
        TreeSet<Integer> set3 = new TreeSet<>(list);
    }


}
